<?php
//PingBuWang.Com//Copyright (c) 2017~2099 http://www.pingbuwang.com All rights reserved.
namespace mip;

use com\Network;
use think\Cache;
use think\Controller;
use think\Config;
use think\Exception;
use think\Log;
use think\Session;
use think\Request;
use WeChat\Script;

/**
 * 所有的Controller层的基类
 * Class Init
 * @package mip
 */
class Init extends Controller
{
    public function _initialize()
    {
        parent::_initialize();
        // mip 初始化
        $this->actionInit();
        // 当前是否通过微信内置浏览器请求的
//        if(Network::isWeixin()){
//            $this->isWeixin = true;
//            $this->weixinInit();
//        }else{
//            $this->isWeixin = false;
//        }
//
//        $this->mipInfo['isWeixin'] = $this->isWeixin;
//
//        // 如果设置了 weixin 的app信息
//        if(isset( $this->mipInfo['wx_appid'])  && isset(  $this->mipInfo['wx_appsecret'])) {
//
//            $this->wx_appid = $this->mipInfo['wx_appid'];
//            $this->wx_appsecret = $this->mipInfo['wx_appsecret'];
//
//            if (empty($this->wx_appid) || empty($this->wx_appsecret)) {
//                return;
//            }
//
//            $this->wxcfg = ['appid' => $this->wx_appid, 'appsecret' => $this->wx_appsecret, 'cache_path' => CACHE_PATH . DS . 'WeChat'];
//        }

    }

    // 初始化微信，获取用户微信信息
//    public function weixinInit(){
//
//        if($this->isWeixin && isset($this->wxcfg) ) {
//
//            $i=0;
//            DealOauthAccessToken:
//            if($i>5) {
//                return;
//            }
//
//            $wxOauthOpenid = session('wx_oauth_openid');
//            if( $wxOauthOpenid == null ) {
//
//                $code = input('code');
//                $wxOauth = new \WeChat\Oauth($this->wxcfg);
//
//                // 没有code ，先取code
//                if($code==null){
//                    $wxurl = $wxOauth->getOauthRedirect($this->fullUrl,'','snsapi_userinfo');
//                    $this->redirect($wxurl);
//                    return;
//                }
//                // 获取Oauth_accesstoken，并放入session中保存
//                $wxarr = $wxOauth->getOauthAccessToken();
//                session('wx_oauth_openid',$wxarr['openid']);
//                session('wx_oauth_accesstoken_time',time());
//                session('wx_oauth_refreshtoken_time',time());
//                if($wxarr['openid'] != null){
//                    Cache::set('wx_oauth_accesstoken_'.$wxarr['openid'] , $wxarr,7200);
//                }
//
//
//            }
//            // 如果已经session中已经存储的时间超过 29 天了  就重新处理AccessToken
//            else if ( time() - session('wx_oauth_refreshtoken_time') > 3600*24*29){
//                $this->clearWxOauth();
//                goto DealOauthAccessToken;
//            }
//            // 超过1个小时
//            else if(time() - session('wx_oauth_accesstoken_time') > 3600 ){
//
//                $openid = session('wx_oauth_openid');
//                $wxOautoAccesstoken = Cache::get('wx_oauth_accesstoken_'.$openid);
//                if($wxOautoAccesstoken==null){
//                    $this->clearWxOauth();
//                    goto DealOauthAccessToken;
//                }
//
//                $refreshToken = $wxOautoAccesstoken['refresh_token'];
//
//                $wxOauth = new \WeChat\Oauth($this->wxcfg);
//                $wxarr = $wxOauth ->getOauthRefreshToken($refreshToken);
//
//                session('wx_oauth_accesstoken_time',time());
//
//                $wx_oauth_refreshtoken_time = session('wx_oauth_refreshtoken_time');
//                if(null!= $wx_oauth_refreshtoken_time ){
//                    session('wx_oauth_refreshtoken_time',$wx_oauth_refreshtoken_time);
//                }
//
//                if($wxarr['openid']!=null){
//                    Cache::set('wx_oauth_accesstoken_'.$wxarr['openid'],$wxarr,7200);
//                }
//
//            }
//
//            // 如果openid存在，但Cache中居然没有accesstoken，则重新处理
//            $wxOauthOpenid = session('wx_oauth_openid');
//            if($wxOauthOpenid !=null){
//                if(Cache::get('wx_oauth_accesstoken_'.$wxOauthOpenid)==null){
//                    $this->clearWxOauth();
//                    goto DealOauthAccessToken;
//                }
//            }
//
//        }
//
//    }

    public function actionInit()
    {
//        $userInfo = Session::get('userInfo');
//        $this->isAdmin = false;
//        if ($userInfo) {
//            $userInfo1 = model('app\users\model\Users')->getById($userInfo['uid']) ;
////            $this->userId = $userInfo1['uid'];
////            $this->groupCode = $userInfo1['group_code'];
//            // 小于100 的组，是管理组，大于等于100的是前台用户组
//            if ($userInfo1['group_code'] < 100) {
//                $this->isAdmin = true;
//            } else {
//                $this->isAdmin = false;
//            }
//            if ($userInfo1['status'] == 1) {
//                Session::delete('userInfo');
//                $this->error('抱歉, 你的账号已经被禁止登录', '/');
//                return;
//            }
//        } else {
////            $this->userInfo = null;
////            $this->userId = '';
////            $this->groupId = '';
//        }

        $mipInfo1 = config('mipInfo');

        //系统关闭状态
        if (!$mipInfo1['systemStatus']) {
            if ($this->request->controller() != 'Admin') {
                if ($this->userInfo['group_id'] != 1) {
                    if (!$this->request->isPost()) {
                        $this->error('站点关闭中...', '');
                    }
                }
            }
        }

//        config('isAdmin', $this->isAdmin);
//        config('userInfo', $this->userInfo);
//        config('userId', $this->userId);

        // 完善mipInfo
//        $mipInfo1['isAdmin'] = $this->isAdmin;
//        $mipInfo1['userInfo'] = $this->userInfo;
//        $mipInfo1['userId'] = $this->userId;

        $mipInfo1['url'] = $this->request->url();
        $mipInfo1['fullUrl'] = $mipInfo1['domain'] . $this->request->url();

        $mipInfo1['currModule'] = $this->request->module();
        $mipInfo1['currController']= $this->request->controller();
        $mipInfo1['currAction']= $this->request->action();

        // 自定义
        if (Request::instance()->isMobile()) {
            $mipInfo1['terminal'] = 'mobile';
        }else{
            $mipInfo1['terminal'] ='pc';
        }

        //header('terminal',$mipInfo1['terminal']);

        config('mipInfo',$mipInfo1);
        $this->mipInfo = $mipInfo1;
        $this->assign('mipInfo',$mipInfo1);

//        $itemList = db('GlobalAction')->select();
//        if ($itemList) {
//            try {
//                foreach ($itemList as $key => $val) {
//                    $addonsName = $val['name'];
//                    if (strpos($addonsName, "mipinit") !== false) {
//
//                        $addonsNameSpace = "addons" . "\\" . $addonsName . "\\" . "controller" . "\\" . "GlobalAction";
//                        Log::error('is GlobalAction',$addonsNameSpace);
//                        model($addonsNameSpace)->$addonsName();
//                    }
//                }
//            } catch (\Exception $e) {
//            }
//        }

    }

    protected function addonsFetch($template = '', $addonsName = '')
    {
        if (!$addonsName) {
            $this->error('模板渲染，缺少参数', '');
        }
        if ($template) {
            $template = '../../../addons' . DS . $addonsName . DS . 'view' . DS . $template;
        } else {
            return false;
        }
        return $this->fetch($template);
    }

    /**
     * 清除当前用户微信登录信息
     */
    protected function clearWxOauth(){
        $openid = session('wx_oauth_openid');
        session('wx_oauth_openid',null);
        session('wx_oauth_accesstoken_time',null);
        session('wx_oauth_refreshtoken_time',null);

        Cache::clear('wx_oauth_accesstoken_'.$openid);
    }

    protected function loadWxUserinfo(){
        if($this->isWeixin == false ){
            return;
        }

        if(session('wx_oauth_openid') !=null && session('wx_userinfo') == null){
            $openid = session('wx_oauth_openid');
            $objAccessToken = Cache::get('wx_oauth_accesstoken_'.$openid);

            if($objAccessToken==null){
                Log::alert('未能获得wx_oauth_accesstoken_OPENID');
                $this->clearWxOauth();
                return;
            }

            $access_token = $objAccessToken['access_token'];
            $wxOauth = new \WeChat\Oauth($this->wxcfg);
            try{
                $arr = $wxOauth->getUserInfo($access_token,$openid);
                session('wx_userinfo',$arr);
            }catch (\Exception $err){
                Log::error('error is:'.$err);
                $this->clearWxOauth();
                return;
            }

        }
    }

}
